#include <iostream>
#include <string>
using namespace std;

#define MIN(X,Y) (X<Y?X:Y)
#define MAX(X,Y) (X>Y?X:Y)

class highpercision
{
private:
	int* num;
	int len;
	int decimal_places;
public:
	highpercision(){}
	~highpercision(){}
	highpercision(string NumStr);
	highpercision(int n);
	highpercision(highpercision const & hp);
	highpercision exp(int n);
	highpercision operator*(const highpercision &hp);
	highpercision operator+(const highpercision &hp);
	highpercision &operator=(const highpercision &hp);
	void display();
};

highpercision::highpercision(highpercision const & hp)
{
	if (!this->num)
	{
		delete[] this->num;
	}
	this->num = new int[hp.len];
	for (int i=0;i<hp.len;i++)
	{
		this->num[i] = hp.num[i];
	}
	this->len = hp.len;
	this->decimal_places = hp.decimal_places;
}

highpercision::highpercision(int n)
{
	this->num = new int[n];
	memset(this->num,0,n*sizeof(this->num));
	this->len = n;
}

highpercision::highpercision(string NumStr)
{
	this->num = new int[NumStr.length()-1];
	this->len=0;
	for (int i = NumStr.length()-1; i>=0; i--)
	{
		if (NumStr[i]!='.')
		{
			num[len] = NumStr[i]-'0';
			this->len++;
		}
		else
		{
			decimal_places = len;
		}
		
	}
	
}

highpercision highpercision::exp(int n)
{
	highpercision result(*this);
	for (int i=0;i<n;i++)
	{
		result = result*(*this);
	}
	return result;
}
highpercision& highpercision::operator=(highpercision const &hp)
{
	if (!this->num)
	{
		delete this->num;
		this->num = new int[hp.len];
	}
	else
	{
		this->num = new int[hp.len];
	}
	for (int i=0;i<hp.len;i++)
	{
		this->num[i] = hp.num[i];
	}
	this->len = hp.len;
	this->decimal_places = hp.decimal_places;
	return *this;
}
highpercision highpercision::operator+(const highpercision& hp)
{
	
	highpercision result(MAX(this->len,hp.len)+1);
	int i=0;
	if (this->len>=hp.len)
	{
		
		int carry=0;
		for(i=0;i<hp.len;i++)
		{
			result.num[i] = (this->num[i]+hp.num[i]+carry)%10;
			carry =  (this->num[i]+hp.num[i]+carry)/10;
		}
		while(carry!=0)
		{
			result.num[i] = (this->num[i]+carry)%10;
			carry = (this->num[i]+carry)/10;
			i++;
		}
		while(i<result.len-1)
		{
			result.num[i] = this->num[i];
			i++;
		}
		result.len = i;
	} 
	else
	{
		/*highpercision result(hp.len+1);*/
		int carry=0;
		for(i=0;i<this->len;i++)
		{
			result.num[i] = (this->num[i]+hp.num[i]+carry)%10;
			carry =  (this->num[i]+hp.num[i]+carry)/10;
		}
		while(carry!=0)
		{
			result.num[i] = (hp.num[i]+carry)%10;
			carry = (hp.num[i]+carry)/10;
			i++;
		}
		while(i<result.len-1)
		{
			result.num[i] = hp.num[i];
			i++;
		}
		result.len = i;
	}
	return result;
}

highpercision highpercision::operator*(const highpercision &hp)
{
	int Max  = this->len+hp.len;
	highpercision result(1);
	int carry = 0;
	int i=0;
	int j=0;
	for (i=0;i<hp.len;i++)
	{
		highpercision tmp(this->len+1+i);
		int carry = 0;
		for (j=i;j<this->len+i;j++)
		{
			tmp.num[j] = (carry+hp.num[i]*this->num[j-i])%10;
			carry = (carry+hp.num[i]*this->num[j-i])/10;
		}
		while (carry!=0)
		{
			tmp.num[j] = carry%10;
			carry = carry/10;
			j++;
		}
		result = result+tmp;
	}
	/*for (i = 0;i<Max;i++)
	{
		for (int j=0;j<=i;j++)
		{
			result.num[i] += this->num[i-j]*hp.num[j];
		}
		result.num[i]+=carry;
		carry = result.num[i]/10;
		result.num[i] = result.num[i]%10;
	}
	while(!carry)
	{
		result.num[i] = carry%10;
		carry = carry/10;
		i++;
	}
	result.len = i;*/
	result.decimal_places = this->decimal_places + hp.decimal_places;
	return result;
}

void highpercision::display()
{
	int tag_pre = 0;
	int tag_aft = 0;
	for (int i=0;i<this->decimal_places;i++)
	{
		tag_aft = i;
		if (this->num[i]!=0)
			break;
	}
	for (int i = this->len-1;i>=this->decimal_places;i--)
	{
		tag_pre = i;
		if (this->num[i]!=0)			
			break;
	}
	if (this->num[tag_pre]!=0)
	{
		for (int i=tag_pre;i>=this->decimal_places;i--)
		{
			cout<<(this->num[i]);
		}
	}
	if (this->num[tag_aft]!=0)
	{
		cout<<'.';
		for (int i=this->decimal_places-1;i>=tag_aft;i--)
		{
			cout<<(this->num[i]);
		}
	}
	cout<<endl;
}

int main()
{
	string str1;
	int n;

	while (cin>>str1>>n)
	{
		int decimal_places = 0;
		highpercision hpOrgNum(str1);
		highpercision result;
		result = hpOrgNum.exp(n-1);
		result.display();
	}
	return 0;
}

